#include <iostream>
#include <vector>

#include <algorithm>

using namespace std;

void MyPrint(int val) { 
    cout << val << " ";
}

int main() {
    vector<int> v;

    v.push_back(1);
    v.push_back(3);
    v.push_back(2);
    v.push_back(4);
    v.push_back(6);
    v.push_back(5);

    // 每一个容器都有自己的迭代器
    // v.begin() 返回迭代器，指向容器中第一个元素
    // v.end() 返回迭代器，指向容器中最后一个元素的下一个位置
    // vector<int>::iterator 可以拿到 vector<int> 容器的迭代器类型

    vector<int>::iterator itBegin = v.begin();
    vector<int>::iterator itEnd = v.end();

    // 第一种遍历方式
    while (itBegin != itEnd) {
        cout << *itBegin << " ";
        itBegin++; // 指针向后移动
    }
    cout << endl;

    // 第二种遍历方式
    for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
        cout << *it << " ";
    }
    cout << endl;

    // 第三种遍历方式
    // 该方法需要引用<algorithm>头文件
    // 使用STL的 for_each函数，其中的MyPrint是我自己定义的一个回调函数，在这会儿不掉用，进去以后掉用打印
    for_each(v.begin(), v.end(), MyPrint);
}